在Ruby中 " = " 與 " == " 與 " === " 其實都不一樣?!
舉例來說 a = 1,會解釋成將 1 的值給予到 a 這個變數(容器)內
這時候當我們呼叫 a 的時候 它就會回應你是 1
a
#一開始直接呼叫 a的時候 他會跟你回應 undefined local variable or method
因為我們根本沒有給予他任何的資訊,所以他會回應說他並未定義為是一個變數或者有一種方法叫做 a
a = 1
=> 1
a #呼叫 a
=> 1
今天當我們想要比較的時候,舉例來說 a = 1, b = "1" 在比較中其實我們想知道的是到底這件事是不是成立的呢?
a == b
false #這時候回傳給我們一個boolean值的參數
boolean值只有包含了 true 以及 false兩種結果,以例子來說 我們可以解釋成
a 等於 b 這件事是不成立(false)的,也就是 a 不等於 b
雖然都是 1 但 a的型態其實是 Integer 而b則是 String
那我又該怎麼知道什麼變數是什麼型態?那就直接去問本人吧!
a = 1
b = "1"
a.class? # a 你的類別是什麼?
Integer #我是Integer(整數)
b.class? # b 你的類別是什麼?
String #我是String(字串)
在Ruby中可以直接對你想詢問的變數問說你到底是屬於什麼類別,很有對話的感覺。
最後介紹來到 "===",其實現階段對我來說,我是很少有機會用到它的
===算是一種複合式的方法,根據使用情境不同會有不同的效果,
例如可以用來判斷class的種類
String === "hello"
true
Object === "hello"
true
Integer === "hello"
false
可以判斷是否包含在一個範圍內
(1..50) === 9
true
(1..50) === 99
false
最有機會用到可能是在when case的判斷式中
when score
case (60..100)
puts "pass!"
case (0..59)
puts "fail!"
end
#在這就是判斷 score 滿足不同的case 來做出不同的反應。
其實比較的本質就是去判斷是否成立(true / false),
另外相似的方法還有 eql? 以及 equal? 會在下個章節 與 == 做比較。